/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import negocio.Alquiler;
import negocio.Articulo;
import negocio.ArticuloAlquilado;
import negocio.Cliente;
import negocio.Devolucion;
import negocio.Empleado;
import negocio.ExcepcionPersistencia;
import negocio.FacturaAlquiler;
import negocio.Juego;
import negocio.Movimiento;
import negocio.Pelicula;
import vista.ObtenerTeclado;

/**
 * Clase controladora de alquileres y devoluciones
 * Realiza la gestión entre la Vista, las clases de Negocio y la Persistencia
 * @author JAVA
 */
public class GestionAlquiler {

    public static Alquiler obtenerAlquiler(Cliente c) {
        Alquiler alq = Alquiler.obtenerAlquiler(c);
        return alq;
    }

    public static void mostrarArticulosPendientes(Alquiler alq) {
        alq.mostrarArticulosAlquilados();
    }

    public static void mostrarMejoresJuegos() {
        Juego.mostrarMejoresJuegos();
    }

    public static void mostrarMejoresPeliculas() {
        Pelicula.mostrarMejoresPeliculas();
    }

    public static void mostrarNovedades() {
        Pelicula.mostrarNovedades();
    }

    public static void valorar(Articulo a, float valoracion) {
        try {
            a.valorar(valoracion);
            System.out.println("Articulo valorado correctamente");
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
    }

    public static Alquiler creaAlquiler(Cliente c) {
        Alquiler alq = new Alquiler(c);
        return alq;
    }

    public static void AddAlquiler(Alquiler alq, int codigo) {
        try {
            Articulo a = Articulo.obtenerArticulo(codigo);
            ArticuloAlquilado aa = new ArticuloAlquilado(a.getId(), a.getFechaAlta(), a.getProve(), a.isDisponible(), a.getTarifa(), a.isSeVende(), a.getValoracion(), a.getTitulo(), new Date());
            alq.addArticuloAlquilado(aa);
            System.out.println("Articulo añadido correctamente al CARRITO");
        } catch (Exception ex) {
            System.out.println(ex.toString());

        }
    }

    public static void EliminarAlquiler(Alquiler alq, int codigo) {
        try {
            Articulo a = Articulo.obtenerArticulo(codigo);
            ArticuloAlquilado aa = new ArticuloAlquilado(a.getId(), a.getFechaAlta(), a.getProve(), a.isDisponible(), a.getTarifa(), a.isSeVende(), a.getValoracion(), a.getTitulo(), new Date());
            alq.eliminarArticuloAlquilado(aa);
            System.out.println("Articulo eliminado correctamente del CARRITO");
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
    }

    public static void mostrarArticulosSeleccionados(Alquiler alq) {
        alq.mostrarArticulosAlquilados();
    }

    public static void confirmar(Cliente c, Alquiler alq, Empleado e) {
        FacturaAlquiler fa = new FacturaAlquiler(c, new Date(), alq, e);
        if (c.getSaldo() >= fa.getTotal()) {
            try {
                alq.confirmarAlquiler();
                Movimiento m=new Movimiento(c, "Alquiler", new Date(), c.getSaldo(), c.getSaldo()-fa.getTotal(), fa.getTotal());
                m.insertarMovimiento();
                c.setSaldo(c.getSaldo()-fa.getTotal());
                fa.imprimirFactura();
                fa.insertarFactura();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
    }

    public static void salirSinConfirmar(Alquiler alq) {
        Iterator it=alq.getListArt().iterator();
        while(it.hasNext()){
            try {
                ArticuloAlquilado aa=(ArticuloAlquilado)it.next();
                alq.eliminarArticuloAlquilado(aa);
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
    }

    public static void devolverArticulo(Alquiler alq, int id) {
        try {
            ArticuloAlquilado aa = ArticuloAlquilado.obtenerArticuloAlquilado(id);
            float val = ObtenerTeclado.dameFloat("Introduzca una valoracion para el articulo");
            aa.valorar(val);
            Devolucion dev = new Devolucion(new Date(), alq);
            dev.devolverArticulo(aa);
            if(aa.getRecargo()>0){
                Movimiento m=new Movimiento(alq.getCli(), "Recargo", new Date(), alq.getCli().getSaldo(), alq.getCli().getSaldo()-aa.getRecargo(), aa.getRecargo());
                m.insertarMovimiento();
                alq.getCli().setSaldo(alq.getCli().getSaldo()-aa.getRecargo());
            }
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
    }

    public static void busquedaPeliculaGenero(String genero) {
        Pelicula.busquedaGenero(genero);
    }

    public static void busquedaJuegoGenero(String genero) {
        Juego.busquedaGenero(genero);
    }

    public static void busquedaPeliculaTitulo(String titulo) {
        Pelicula.busquedaTitulo(titulo);
    }

    public static void busquedaJuegoTitulo(String titulo) {
        Juego.busquedaTitulo(titulo);
    }

    public static void busquedaAnyo(int anyo) {
        Pelicula.busquedaAnyo(anyo);
    }

    public static void busquedaDirector(String director) {
        Pelicula.busquedaDirector(director);
    }

    public static void busquedaJuegoSoporte(String soporte) {
        Juego.busquedaJuegoSoporte(soporte);
    }
    
}
